// Node.js自带模块：
// 查询字符串模块querystring
// 加密模块crypto
// 流模块stream
// 定时器模块timers
// 工具模块util
// 缓冲区模块buffer
// 进程模块process

// ‌文件系统模块（fs）‌：
// 1.用于操作磁盘文件，提供读取、写入、追加内容及删除文件等方法
// 2.该模块支持同步、异步回调和异步Promise三种操作方式

// ‌路径处理模块（path）‌：
// 1.用于对路径和文件进行处理，提供获取路径信息、拼接路径等实用方法
// 2.常用API包括path.dirname()获取父文件夹、path.basename()获取文件名、path.extname()获取文件扩展名以及path.join()合并目录

// ‌HTTP模块‌：
// 1.用于创建Web服务器、监听端口，并处理HTTP请求和响应
// 2.可以基于此模块构建API接口项目或搭建静态资源服务器

// 操作系统模块(‌OS)：
// 1.提供获取系统信息的功能，如内存大小、CPU相关信息、主机名和系统类型等


// ‌URL模块‌：
// 1.用于解析URL，处理网络地址相关操作

// ‌事件模块(Events)：
// 1.基于异步事件驱动，用于处理事件监听和触发



// 文件系统模块fs
const fs = require("fs")
    // （1）文件处理
    // 1.读取文件：
    // fs.readFile('文件路径', '编码格式', (err, data) => {})
fs.readFile("./phase04/demo17.js", "utf-8", (error, data) => { // 异步
    if (error) {
        console.log("出错了", error)
        return
    }
    console.log("异步读取文件", data)
})
let dataSync = fs.readFileSync("./phase04/demo17.js", "utf-8") // 同步
console.log("同步读取", dataSync)

// 注意* 写入文件和追加文件 在文件路径没有的时候 会自动创建

// 2.写入文件：fs.writeFile('文件路径', '写入内容(字符串/Buffer/JSON数据)', (err) => {})
fs.writeFile('./homework/work17.js', "HelloWorld", (error) => {
    if (error) {
        console.log("内容写入失败", error)
        return
    }
    console.log("内容写入成功")
})

// 3.追加文件：appendFile('文件路径', '追加内容(字符串/Buffer)', (err) => {})
fs.appendFile("./homework/work17.js", "HelloWorld", (error) => {
    if (error) {
        console.log("内容追加失败", error)
        return
    }
    console.log("内容追加成功")
})

// 4.删除文件：fs.unlink('文件路径', (error) => {})
fs.unlink('./homework/work17.js', (error) => {
    if (error) {
        console.log("文件删除失败", error)
        return
    }
    console.log("文件删除成功")
})


// （2）目录操作
// 1.创建目录
fs.mkdir('new-folder', { recursive: true }, (error) => {
        // {recursive: true}：可以创建多级嵌套目录，自动创建所有不存在的父目录
        // {recursive: false}(默认值)：只能创建单级目录，父目录必须存在
        if (error) {
            console.log(error)
            return
        }
        console.log("目录创建成功")
    })
    // 2.读取目录
    // fs.readdir('要读取的目录路径', (error, files) => {})
fs.readdir('./', (error, files) => {
        if (error) {
            console.log(error)
            return
        }
        console.log("目录内容：", files)
    })
    // 3.删除目录
fs.rmdir('new-folder', (error) => {
    if (error) {
        console.log(error)
        return
    }
    console.log("目录删除成功")
})


// （3）文件信息：
// fs.stat('文件路径', (error, stats) => {})：用于获取文件/目录的状态信息
fs.stat("./phase04/demo17.js", (error, stats) => {
    // stats：回调函数返回的一个文件状态对象
    if (error) {
        console.log("查询文件信息失败", error)
        return
    }
    // 是否是文件
    console.log(stats.isFile())
        // 是否是目录
    console.log(stats.isDirectory())
        // 文件大小
    console.log(stats.size) // 单位为字节
})